import PropTypes from '@zh/common-utils/prop-types'

export default {
  // 与生命周期同级
  provide () {
    return {
      // 子组件调用的名字：对应的方法（当前页面，祖父级元素的方法）
      orgin: this
    }
  },
  props: {
    value: PropTypes.array.def([]),
    showInput: PropTypes.bool.def(true),
    // 最大选择数量
    limit: PropTypes.number.def(100),
    // 默认显示机构简称
    shortName: PropTypes.bool.def(true),
    disabled: PropTypes.bool.def(false).des('禁用'),
    topUnitId: PropTypes.string.def('0').des('顶级机构id'),
    topUnitName: PropTypes.string.def('最顶级').des('顶级机构名称'),
    cantianSelf: PropTypes.string.def('1').des('1表示包含自己，0表示不包含自己'),
    isIncludChildren: PropTypes.string.def('1').des('是否包含下级'),
    disabledId: PropTypes.array.def([]).des('是否禁用某个人员或机构'),
    label:PropTypes.string.def('').des(''),
    extend:PropTypes.string.def('').des(''),
    deep:PropTypes.string.def('1').des(''),
  },
  data () {
    return {
      newValue: [],
      valueList: [],
      dataList: [],
      // 区分人员部门id
      userIdFlag: 'UNIT',
      // 判断是否加载数据完成
      listLoading: false
      // 缓存所有列表名称
    }
  },
  /** 监听 */
  watch: {
    value: {
      immediate: true,
      deep: true,
      handler (val, oldVal) {
        this.newValue = val || []
        if (!this.newValue || this.newValue.length == 0) {
          this.newValue = []
          this.userName = ''
          return
        }
        // 默认值
        this.handleDefautValue(val)
        /** 判断数据是否一致 */
        let eq = true
        // 判断数据是否存在
        if (val && oldVal && val.length == oldVal.length) {
          for (const id of val) {
            if (!oldVal.includes(id)) {
              eq = false
              break
            }
          }
        } else {
          eq = false
        }
        if (eq) {
          return
        }
        // 返现
        if ((typeof this.newValue == 'string') && this.newValue.constructor == String) {
          try {
            this.newValue = JSON.parse(this.newValue)
          } catch (e) {
            this.newValue = []
          }
          this.getReverseData()
        } else if (this.newValue instanceof Array && this.newValue.length > 0) {
          this.getReverseData()
        } else if (this.newValue instanceof Array && this.newValue.length == 0) {
          if (this.attrs.type == 'user') {
            this.userName = ''
          } else {
            this.unitName = ''
          }
        }
      }
    },
    limit (v) {
      if (!v || v == 0) {
        v = 100
      }
    }
  },
  methods: {
    handleDefautValue (val) {
      // 默认值
      if (val == 'user' || val == 'dept' || val == 'unit') {
        let userInfo = null
        try {
          userInfo = JSON.parse(this.$t.getSession('userInfo'))
        } catch (e) {
          console.error('处理默认值时获取登录信息错误！')
          return val
        }
        let id = val
        switch (val) {
          case 'user':
            id = userInfo.userId
            break
          case 'dept':
            id = userInfo.deptId
            break
          case 'unit':
            id = userInfo.unitId
            break
        }
        this.newValue = [id]
        this.emitValue()
      }
    },

    // 传出值
    emitValue () {
      this.$emit('input', this.newValue)
      this.$emit('model', this.newValue)
    },
    // 更新人员展示名称
    updateUserName (val) {
      this.userName = ''
      val.forEach((item, index) => {
        // 拼接选中人员名称
        this.userName += this.labelDataList[item][this.pro.name]
        if (index < val.data.length - 1) {
          this.userName += '、'
        }
      })
      this.$forceUpdate()
    }
  }
}
